Current computer software code, such as source code for operating systems and multipurpose applications, is very complex and can comprise thousands of lines. In addition, common computer languages use routines and subroutines that are interrelated in complex ways to effect operations that the software is intended to perform. These factors and others make it a practical impossibility for one person to write such code, or even for a handful of people to collaborate as an organic whole to write it. Accordingly, it is common practice for a large number of individual software developers, usually working in plural teams, to be responsible for different functional parts (sometimes referred to as “branches”) of the code.
One typical way this is handled is to have a master version of the entire code in a secure repository, such as a server computer, and to have the individuals and/or teams developing the code work against this master version. The master version can be made available to the developers working on the code, such as by lodging a copy of it on the computer workstation of each developer. The developers' workstations have resident software that enables them to write new lines of code for addition to the master version or to revise existing lines of code. Developers, whether individuals or teams, can then transmit their proposed changes to the server computer on which the master version resides for possible incorporation into the master version (“reverse integration”). The server computer includes resident software that automatically integrates proposed changes into the master version and also determines if the proposed changes would cause any conflicts either among the changes or with the existing master version of the code. (As used herein, the term “conflict” generally refers to a situation in which a particular line or section of code, when executed, would impair or prevent execution of other lines or sections of the code.) Many companies that develop software, particularly large organizations, use proprietary integration/conflict resolution software, but there are commercially available versions of such software that are entirely suitable for the purpose, an example being the Team Foundation Server collaborative software development application available from Microsoft Corporation, the assignee of the present application.
In any case, if such software cannot automatically resolve a potential conflict that would be caused by integrating proposed changes/additions into the master version of a code being developed, the various developers must collaborate to resolve the conflict. Once that is accomplished, the new master version is provided to the developers and/or teams (“forward integration”) for further additions and/or revisions as development of the code continues.
Although this paradigm has been used successfully to write code for numerous software products, it is fairly cumbersome and generally requires a large number of communications and/or meetings among the various individual developers and teams to carry out periodic forward and reverse integrations to resolve potential conflicts that would result from proposed changes and thereby permit the code to be completed. As a result, development can be slowed while these communications take place so that all of the developers are working with the same master version of the source code at any one time.